package modelo.datos;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import modelo.adaptadores.EntradaAdapter;

@XmlRootElement(name="entrada")
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(propOrder={"nombre", "apellidos", "nif", "direccion", "telefonos",
		"self", "parent"}) // El acceso es por propiedad,
															   // la clase padre debe tener getter/setters
															   // y tambi�n las hijas.
public class Persona extends Entrada {
	private String apellidos;

	public Persona() {
		super();
	}

	public Persona(String nombre, String apellidos, String nif, 
			Direccion direccion, List<Telefono> telefonos) {
		super(nombre, nif, direccion, telefonos);
		this.apellidos = apellidos;
	}

	public String getApellidos() {
		return apellidos;
	}
	
	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}
	
//	@Override
	public void actualiza(Entrada entrada) {
		Persona persona = (Persona)entrada;
		setNombre(persona.getNombre());
		setApellidos(persona.getApellidos());
	}

	@Override
	public String toString() {
		return getNombre() + ", " + apellidos + ", " + getNif();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result
				+ ((apellidos == null) ? 0 : apellidos.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		Persona other = (Persona) obj;
		if (apellidos == null) {
			if (other.apellidos != null)
				return false;
		} else if (!apellidos.equals(other.apellidos))
			return false;
		return true;
	}
}
